import { getAppType } from './common'

interface setParam {
  key: string
  data: any
  success?: () => {}
  fail?: (err: any) => {}
}

class Storage {
  private prefix = ''

  public constructor() {
    this.prefix = getAppType() == 'admin' ? 'admin' : 'site'
  }

  public setPrefix(prefix: string) {
    this.prefix = prefix
  }

  /**
   * 设置缓存
   * @param param
   */
  public set(param: setParam) {
    try {
      window.localStorage.setItem(`${this.prefix}.${param.key}`, JSON.stringify(param.data))
      typeof param.success == 'function' && param.success()
    } catch (error) {
      typeof param.fail == 'function' && param.fail(error)
    }
  }

  /**
   * 获取缓存
   * @param key
   * @returns
   */
  public get(key: string) {
    try {
      const json: any = window.localStorage.getItem(`${this.prefix}.${key}`)
      return JSON.parse(json)
    } catch (error) {
      return window.localStorage.getItem(`${this.prefix}.${key}`)
    }
  }

  /**
   * 移除指定缓存
   * @param key
   */
  public remove(key: string | string[]) {
    if (typeof key == 'string') window.localStorage.removeItem(`${this.prefix}.${key}`)
    else
      key.forEach((item) => {
        window.localStorage.removeItem(`${this.prefix}.${item}`)
      })
  }

  /**
   * 清理缓存
   */
  public clear() {
    window.localStorage.clear()
  }
}

const storage = new Storage()
export default storage
